package com.westvalley.http;

import java.io.UnsupportedEncodingException;  
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;  
import java.util.List;  
import java.util.Map;  
  
import org.apache.http.HttpEntity;  
import org.apache.http.HttpResponse;  
import org.apache.http.NameValuePair;  
import org.apache.http.client.entity.UrlEncodedFormEntity;  
import org.apache.http.client.methods.HttpGet;  
import org.apache.http.client.methods.HttpPost;  
import org.apache.http.client.methods.HttpUriRequest;  
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;  
import org.apache.http.message.BasicNameValuePair;  
import org.apache.http.protocol.HTTP;  
import org.apache.http.util.EntityUtils;  

public class HttpXmlClient {  
      
    public static String post(String url, Map<String, String> params) {  
        DefaultHttpClient httpclient = new DefaultHttpClient();  
        String body = null;  
        
        HttpPost post = postForm(url, params);  
        body = invoke(httpclient, post);  
        httpclient.getConnectionManager().shutdown();  
        return body;  
    }  
    
    @SuppressWarnings("deprecation")
	public static String postBody(String url,String bodyParam,String bodyContentType){
    	String body = null;  
    	try{
	    	DefaultHttpClient httpclient = new DefaultHttpClient(); 
	    	HttpPost post = postForm( url, null);  
	    	post.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");
	    	StringEntity entity = new StringEntity(bodyParam,HTTP.UTF_8);//解决中文乱码问题    
	    	entity.setContentType(bodyContentType);
	    	post.setEntity(entity);
	    	body = invoke(httpclient, post);  
	        httpclient.getConnectionManager().shutdown();  
    	}catch (Exception e) {
    		throw new RuntimeException(e);
		}
    	return body;  
    }
      
    public static String get(String url) {  
        DefaultHttpClient httpclient = new DefaultHttpClient();  
        String body = null;  
        HttpGet get = new HttpGet(url);  
        body = invoke(httpclient, get);  
        httpclient.getConnectionManager().shutdown();  
        return body;  
    }  
          
      
    private static String invoke(DefaultHttpClient httpclient,  
            HttpUriRequest httpost) {  
        HttpResponse response = sendRequest(httpclient, httpost);  
        String body = paseResponse(response);  
        return body;  
    }  
  
	private static String paseResponse(HttpResponse response) {  
        HttpEntity entity = response.getEntity();  
        String charset = "utf-8";  
        String body = null;  
        try {  
            body = EntityUtils.toString(entity,charset);  
        } catch (Exception e) {  
        	throw new RuntimeException(e);
        }
        return body;  
    }  
  
    private static HttpResponse sendRequest(DefaultHttpClient httpclient,HttpUriRequest httpost) {  
        HttpResponse response = null;  
        try {  
            response = httpclient.execute(httpost);  
        } catch (Exception e) {  
        	throw new RuntimeException(e);
        } 
        return response;  
    }  
  
    @SuppressWarnings("deprecation")
	private static HttpPost postForm(String url, Map<String, String> params){  
        HttpPost httpost = new HttpPost(url);  
        List<NameValuePair> nvps = new ArrayList <NameValuePair>();  
        if(params!=null){
	        for(String key : params.keySet()) {  
	            nvps.add(new BasicNameValuePair(key, params.get(key)));  
	        }  
        }
        try {  
            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));  
        } catch (Exception e) {  
        	throw new RuntimeException(e);
        }  
        return httpost;  
    }  
    
    public static String md5(String input) throws NoSuchAlgorithmException, UnsupportedEncodingException {
		byte[] digest = MessageDigest.getInstance("MD5").digest(input.getBytes("UTF-8"));
		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < digest.length; i++) {
			sb.append(String.format("%02x", Integer.valueOf(digest[i] & 0xFF)));
		}
		return sb.toString();

	}
    
}  
